-- change_spell
-- created by wangy
-- 获得魔法卷轴时转化为对应阶位的X系魔法卷轴

return {
    apply = function(prop, baseValue)
        return prop[3];
    end,

    -- 每回合触发
    trigger = function(who, prop, arg)
        -- 待转换的id以及目标系别
        local classId = arg;
        local style   = tonumber(prop[2]);

        local rank = SpellM.query(classId, "rank");
        local spells = SpellM.fetchSpellByRank(rank, style);

        -- 如果是系别内的转化，需要把自己过滤掉。非特殊产出才过滤
        if style == SpellM.query(classId, "style") and SpellM.query(classId, "special_gain") ~= 1 then
            table.removeItem(spells, classId);
        end

        -- 没了
        if #spells <= 0 then
            return classId;
        end

        local count = #spells;

        if SpellM.query(classId, "special_gain") ~= 1 then
            if DungeonM.getState() == DUNGEON_GAMING then
                -- 触发特技发动事件
                EventMgr.fire(event.SPECIAL_SKILL_TRIGGER, { propId = prop[1] });
            else
                ME.user.dbase:setTemp("speicial_skill_trigger", prop[1]);
            end
        end

        if count == 1 then
            -- 如果只有一个
            return spells[1];
        end

        -- 找一个特殊产出的
        for index = 1, count do
            if SpellM.query(spells[index], "special_gain") == 1 then
                return spells[index];
            end
        end

        local rand = DungeonM.getRandSeed("change_spell");

        -- 返回的是数组防止以后多个，随机抽取
        classId = FormulaM.invoke("FETCH_BY_RAND", spells, rand);

        return classId;
    end,

    record = function(target, prop, path)
        return false;
    end
};
